/**
  ******************************************************************************
  * @file    main.c 
  * @author  18408107475@163.com
  * @version v1.2
  * @date    2025-05-06
  * @brief   RTC实时时钟系统主程序
  * @details 
  * 硬件配置：
  * 1. 使用STM32F103C8T6最小系统板
  * 2. 连接32.768kHz晶振至OSC32_IN/OSC32_OUT引脚（PC14/PC15）
  * 3. USART1用于调试输出（PA9-TX, PA10-RX）
  * 
  * 软件特性：
  * 1. 基于LSE（低速外部时钟）的RTC配置
  * 2. 自动检测RTC是否首次初始化
  * 3. 提供1秒精度的实时时钟显示
  * 
  * 校准说明：
  * 1. 首次上电需自动校准时间（通过RTC_Time初始值）
  * 2. 晶振精度影响长期走时精度，建议使用±20ppm以上精度的晶振
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"          // STM32标准外设库（V3.5.0）
#include "Delay.h"              // 精确延时库（基于SysTick，±1us精度）
#include "USART1_Config.h"      // 调试串口配置（PA9/PA10，硬件流控禁用）
#include "RTC_Config.h"         // RTC驱动（支持LSE/LSI时钟源）


/* 常量定义 ------------------------------------------------------------------*/
// 注：RTC初始时间在RTC_Config.h中定义为：{2025, 5, 10, 13, 45, 10}

/* 函数声明 ------------------------------------------------------------------*/
// 所有函数声明已在对应头文件中定义

/* 主程序 --------------------------------------------------------------------*/
/**
  * @brief  主函数
  * @param  无
  * @retval int 程序永远不会返回
  */
int main(void)
{
    /* 硬件初始化（注意执行顺序） */
    USART1_Config(115200);      // 1. 先初始化调试串口（115200bps，用于输出状态信息）
    RTC_LSE_Config();           // 2. 初始化RTC（自动检测是否需要配置时钟）
    
    /* 主循环 */
    while(1)
    {
        Time_Display();         // 通过串口输出当前时间（包含日期和时间）
        Delay_s(1);             // 精确延时1秒（基于SysTick）
        
        // 注：实际产品中建议使用RTC秒中断代替延时
        // 此处为演示用途使用阻塞式延时
    }
}

/************************ (C) COPYRIGHT 2025 STMicroelectronics *****END OF FILE****/
